<?php

declare(strict_types=1);

namespace ImiApp\ApiServer\Api\Controller;

use Imi\Aop\Annotation\Inject;
use Psr\Http\Message\ResponseInterface;

use ImiApp\ApiServer\Common\AuthApi;
use Imi\Server\Http\Route\Annotation\Action;
use Imi\Server\Http\Route\Annotation\Route;
use Imi\Server\Http\Route\Annotation\Controller;
use Phpben\Imi\Validate\Annotation\Validate;
use Imi\Db\Db;


use Imi\Cron\Util\CronUtil;
use Imi\Cron\Annotation\Cron;
// use Imi\Test\HttpServer\Cron\CronDWorker;


//对列
use \Imi\Queue\Facade\Queue;


/**
 * 任务测试
 * @AuthApi(nologin={"*"})
 * @Controller("/task/")
 */
class Task extends ApiBase
{


    /**
     * 测试
     *
     * @Action
     * @Route(url="test")
     * @param $field
     * @return void
     */
    public function test($field = null)
    {


        $cron = new Cron;
        $cron->id = 'CronRandomWorkerTest';
        $cron->second = '3n';
        $cron->type = 'random_worker';
        CronUtil::addCron($cron, Test::class);

        return $this->success('定时任务');

        // if ($field) {
        //     return $this->success($field, config($field));
        // } else {
        //     return $this->success('all', config());
        // }
    }


    /**
     * 测试定时器
     *
     * @Action
     * @param $field
     * @return void
     */
    public function test_timer($field = null)
    {

        //无限执行 每隔 1 秒执行一次
        $timerId = \Imi\Timer\Timer::tick(10000, function(){
            // 执行内容
            var_dump('无限制 定时器10秒'.date('Y-m-d H:i:s'));
        });

        // $timerId3 = \Imi\Timer\Timer::tick(100, function(){
        //     // 执行内容
        //     var_dump('删除 定时器3'.date('Y-m-d H:i:s'));
        // });

        // 只执行一次 1 秒后执行一次
        $timerId2 = \Imi\Timer\Timer::after(15000, function() use ($timerId){


            \Imi\Timer\Timer::del($timerId);
            var_dump('只一次 定时器15秒'.date('Y-m-d H:i:s'));
        });

       
  
        // 删除定时器
        // \Imi\Timer\Timer::del($timerId3);
        return $this->success('定时任务');

        // if ($field) {
        //     return $this->success($field, config($field));
        // } else {
        //     return $this->success('all', config());
        // }
    }



    /**
     * 获取任务列表
     *
     * @Action
     * @return void
     */
    public function get_list()
    {
        $realTasks = CronUtil::getRealTasks();
        $list = [];
        foreach ($realTasks as $taskName => $task) {
            $list[] = "任务#$taskName : $task->id";
        }
        return $this->success('ok', $list);
    }


    /**
     * 对列测试
     *
     * @return void
     * @Action
     */
    public function queue_test(){
        
        //使用那个对列    
        $queue = Queue::getQueue('xiaohe1');
        $message = new \Imi\Queue\Model\Message;
        //发布对列
        $message->setMessage(json_encode(['p1'=>'我是对列','order'=>1223],JSON_UNESCAPED_UNICODE));
        $queue->push($message);


        //使用那个对列    
        $queue2 = \Imi\Queue\Facade\Queue::getQueue('xiaohe2');
        $message2 = new \Imi\Queue\Model\Message;
        //发布对列
        $message2->setMessage(json_encode(['p1'=>'我是对列222','order'=>1223],JSON_UNESCAPED_UNICODE));
        $queue2->push($message2);

       return $this->success('ok');
    }




}
